﻿using Microsoft.Extensions.Caching.Distributed;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _04.Net8Cache.Customs
{
    public class CustomCache : IDistributedCache
    {
        /// <summary>
        /// 定义并发字典
        /// </summary>
        private ConcurrentDictionary<string, byte[]> _Cache = new ConcurrentDictionary<string, byte[]>();

        public byte[]? Get(string key)
        {
            _Cache.TryGetValue(key, out var value);
            return value;
        }

        public async Task<byte[]> GetAsync(string key, CancellationToken token = default)
        {
            // 异步操作通常用于访问外部资源，但在这个内存缓存示例中，我们可以直接返回结果
            return Get(key);
        }

        public void Refresh(string key)
        {
            // 在内存缓存中，刷新操作可能不需要执行任何操作
        }

        public async Task RefreshAsync(string key, CancellationToken token = default)
        {
            // 异步操作通常用于访问外部资源，但在这个内存缓存示例中，我们可以直接返回
            Refresh(key);
        }

        public void Remove(string key)
        {
            _Cache.TryRemove(key, out _);
        }

        public async Task RemoveAsync(string key, CancellationToken token = default)
        {
            Remove(key);
        }

        public void Set(string key, byte[] value, DistributedCacheEntryOptions options)
        {
            _Cache[key] = value;
        }

        public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default)
        {
            Set(key, value, options);
        }

    }
}
